package cn.joker.util;

import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.joker.entity.po.Permissions;
import cn.joker.entity.vo.PermissionTreeVO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class PermissionTreeConverter {
    /**
     * 将权限列表转换为树形结构
     *
     * @param permissions 原始权限列表
     * @return 树形结构的权限列表
     */
    public static List<PermissionTreeVO> buildPermissionTree(List<Permissions> permissions) {
        // 1. 将所有 Permission 转成 VO，并按 permissionCode 映射
        Map<String, PermissionTreeVO> voMap = new HashMap<>();
        for (Permissions p : permissions) {
            voMap.put(p.getPermissionCode(),
                    new PermissionTreeVO(p.getPermissionCode(), p.getPermissionName(), p.getIcon()));
        }

        // 2. 构建树结构
        List<PermissionTreeVO> rootList = new ArrayList<>();
        for (Permissions p : permissions) {
            String parentId = p.getParentId();
            PermissionTreeVO currentNode = voMap.get(p.getPermissionCode());

            if (ObjUtil.isNull(parentId)) {
                // 顶级节点
                rootList.add(currentNode);
            } else {
                // 子节点，找到父节点的 VO 并添加到其 children 中
                Permissions parentPermission = permissions.stream()
                        .filter(x -> x.getPermissionCode().equals(parentId))
                        .findFirst()
                        .orElse(null);
                if (parentPermission != null) {
                    PermissionTreeVO parentVO = voMap.get(parentPermission.getPermissionCode());
                    if (parentVO != null) {
                        parentVO.getChildren().add(currentNode);
                    }
                }
            }
        }

        return rootList;
    }
}